<script setup lang="ts">
import type { FormInstance, FormRules } from 'element-plus'
import { jwtDecode } from 'jwt-decode';
import { loginConnection } from '@/api/login'

import useUserStore from '@/store/modules/user'
const user = useUserStore()

const router = useRouter()

let param = ref({
  username: 'admin',
  password: '123456',
})

const ruleFormRef = ref<FormInstance>()
//表单校验
const rules = reactive<FormRules>({
  username: [
    {
      required: true,
      trigger: 'submit',
      message: '请输入用户名',
    },
  ],
  password: [
    {
      required: true,
      trigger: 'submit',
      message:
        '请输入密码',
    },
  ],
})
const submitForm = async () => {
  if (!ruleFormRef?.value) return
  await ruleFormRef.value.validate((valid: any, fields: any) => {
    if (valid) {
      console.log(valid)
      login()
    } else {
      console.log('error submit!', fields)
    }
  })
}

const login = function () {
  loginConnection(param.value).then((res: any) => {
    const decoded = jwtDecode(res.data)
    user.setToken(res.data)
    user.setUserInfo(decoded)
    user.setLoginState(true)
    router.push({ name: 'books' })
  })
}
</script>

<template>
  <div class="login-wrap">
    <div class="ms-login">
      <div class="ms-title">mini-library</div>
      <el-form :model="param" :rules="rules" ref="ruleFormRef" label-width="0px" class="ms-content">
        <el-form-item prop="username">
          <el-input v-model="param.username" placeholder="用户名" autocomplete="off">
            <template #prepend>
              <el-icon>
                <User />
              </el-icon>
            </template>
          </el-input>
        </el-form-item>
        <el-form-item prop="password">
          <el-input type="password" placeholder="密码" show-password v-model="param.password" @keyup.enter="submitForm">
            <template #prepend>
              <el-icon>
                <Lock />
              </el-icon>
            </template>
          </el-input>
        </el-form-item>
        <div class="login-btn">
          <el-button style="margin-top: 30px;" type="primary" @click="submitForm">登录</el-button>
        </div>
      </el-form>
    </div>
  </div>
</template>

<style lang="scss" scoped>
.login-wrap {
  position: relative;
  width: 100%;
  height: 100%;
  background-image: url(../../assets/images/login_bg.png);
  background-size: 100%;
}

.ms-title {
  width: 100%;
  line-height: 50px;
  text-align: center;
  font-size: 20px;
  color: #fff;
  border-bottom: 1px solid #ddd;
}

.ms-login {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 350px;
  margin: -190px 0 0 -175px;
  border-radius: 5px;
  background: rgba(255, 255, 255, 0.3);
  overflow: hidden;
}

.ms-content {
  padding: 30px 30px;
}

.login-btn {
  text-align: center;
}

.login-btn button {
  width: 100%;
  height: 36px;
  margin-bottom: 10px;
}
</style>
